#Boa:Dialog:Dialog1

import wx
import wx.grid
import consultasBD
import utiles

def create(parent):
    return Dialog1(parent)

[wxID_DIALOG1, wxID_DIALOG1BUTTON1, wxID_DIALOG1BUTTON2, wxID_DIALOG1BUTTON3, 
 wxID_DIALOG1COMBOBOX1, wxID_DIALOG1GRID1, wxID_DIALOG1STATICTEXT1, 
 wxID_DIALOG1STATICTEXT2, wxID_DIALOG1STATICTEXT3, wxID_DIALOG1STATICTEXT4, 
 wxID_DIALOG1STATICTEXT5, wxID_DIALOG1TEXTCTRL1, wxID_DIALOG1TEXTCTRL2, 
] = [wx.NewId() for _init_ctrls in range(13)]

class Dialog1(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_DIALOG1, name='', parent=prnt,
              pos=wx.Point(20, 23), size=wx.Size(796, 577),
              style=wx.DEFAULT_DIALOG_STYLE, title='Clientes que no compran')
        self.SetClientSize(wx.Size(788, 550))

        self.staticText1 = wx.StaticText(id=wxID_DIALOG1STATICTEXT1,
              label='Fecha actual', name='staticText1', parent=self,
              pos=wx.Point(16, 0), size=wx.Size(61, 13), style=0)

        self.textCtrl1 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL1, name='textCtrl1',
              parent=self, pos=wx.Point(16, 16), size=wx.Size(72, 21), style=0,
              value='00-00-0000')

        self.staticText2 = wx.StaticText(id=wxID_DIALOG1STATICTEXT2,
              label='Cant.', name='staticText2', parent=self, pos=wx.Point(96,
              0), size=wx.Size(27, 13), style=0)

        self.textCtrl2 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL2, name='textCtrl2',
              parent=self, pos=wx.Point(96, 16), size=wx.Size(32, 21), style=0,
              value='50')

        self.button1 = wx.Button(id=wxID_DIALOG1BUTTON1, label='Procesar',
              name='button1', parent=self, pos=wx.Point(192, 16),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnProcesar,
              id=wxID_DIALOG1BUTTON1)

        self.button2 = wx.Button(id=wxID_DIALOG1BUTTON2, label='Imprimir',
              name='button2', parent=self, pos=wx.Point(616, 16),
              size=wx.Size(75, 23), style=0)
        self.button2.Enable(False)
        self.button2.Bind(wx.EVT_BUTTON, self.OnImprimir,
              id=wxID_DIALOG1BUTTON2)

        self.button3 = wx.Button(id=wxID_DIALOG1BUTTON3, label='Salir',
              name='button3', parent=self, pos=wx.Point(696, 16),
              size=wx.Size(75, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_DIALOG1BUTTON3)

        self.grid1 = wx.grid.Grid(id=wxID_DIALOG1GRID1, name='grid1',
              parent=self, pos=wx.Point(16, 56), size=wx.Size(760, 488),
              style=0)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK, self.OnDobleClick)

        self.comboBox1 = wx.ComboBox(choices=["1", "2", "3", "4", "5", "6"],
              id=wxID_DIALOG1COMBOBOX1, name='comboBox1', parent=self,
              pos=wx.Point(136, 16), size=wx.Size(48, 21), style=0, value='')
        self.comboBox1.SetLabel('')

        self.staticText3 = wx.StaticText(id=wxID_DIALOG1STATICTEXT3,
              label='a meses', name='staticText3', parent=self,
              pos=wx.Point(136, 0), size=wx.Size(39, 13), style=0)

        self.staticText4 = wx.StaticText(id=wxID_DIALOG1STATICTEXT4,
              label='Se muestran los clientes que no han comprado en los',
              name='staticText4', parent=self, pos=wx.Point(280, 16),
              size=wx.Size(253, 13), style=0)

        self.staticText5 = wx.StaticText(id=wxID_DIALOG1STATICTEXT5,
              label='meses que se indican. "Cant" es la cantidad a mostrar.',
              name='staticText5', parent=self, pos=wx.Point(280, 32),
              size=wx.Size(261, 13), style=0)

    def __init__(self, parent):
        self._init_ctrls(parent)
        fecha = utiles.obtenerFecha("d-m-Y")
        self.comboBox1.SetSelection(2)
        self.textCtrl1.SetLabel(fecha)
        self.crearGrilla()

    def ajustarColumnas(self):
        for col in xrange(self.grid1.GetNumberCols()):
            self.grid1.AutoSizeColumn(col,True)
    
    def crearGrilla(self):
        #idcliente,nombre,telefono,ultima,importe
        #0         1      2        3      4
        columnas =['ID Cliente','Nombre','Telefono','Ultima\ncomunicacion','Importe']
        self.grid1.CreateGrid(1,len(columnas))
        for i, col in enumerate(columnas):
            self.grid1.SetColLabelValue(i, col)
        self.grid1.AutoSizeRow(0,True)
        self.ajustarColumnas()
        
    def limpiaGrilla(self):
        self.grid1.ClearGrid()
        for x in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        self.grid1.AppendRows()

    def OnSalir(self, event):
        self.Close()

    def consultaVendidos(self,fecha1):
        r1 = "SELECT p2.idcliente, p3.nombre, p3.telefono, p2.total \n"
        r2 = "FROM (SELECT p1.idcliente, p1.total \n"
        r3 = "      FROM (SELECT idcliente, SUM( totalfactura ) AS total \n"
        r4 = "            FROM ventas WHERE fecha < '"+fecha1+"' \n"
        r5 = "            GROUP BY idcliente ) AS p1 \n"
        r6 = "      ORDER BY total DESC) AS p2, \n"
        r7 = "      cliente AS p3 \n"
        r8 = "WHERE p3.idcliente = p2.idcliente \n"
        sql = r1+r2+r3+r4+r5+r6+r7+r8
        resultados = consultasBD.ordenCrudaDict(sql)
        return resultados

    def ultimoComunicado(self,idcliente):
        sql = "SELECT fecha FROM clientehistorial WHERE idcliente='"+idcliente+"' ORDER BY fecha DESC LIMIT 1"
        resultado = consultasBD.ordenCruda(sql)
        try:
            fecha,hora = str(resultado[0][0]).split(" ")
            fecha = utiles.invertirFecha2(fecha)
            return fecha+" "+hora
        except:
            return " "
        
    def OnProcesar(self, event):
        self.limpiaGrilla()
        try:
            totCantidad = int(self.textCtrl2.GetLabel())
        except:
            utiles.mensaje(None,"Debe especificar una cantidad")
            self.textCtrl2.SetLabel("50")
            self.textCtrl2.SetFocus()
            return
        try:
            meses = int(self.comboBox1.GetLabel())*30*-1
        except:
            meses = 3*30*-1
        from datetime import date
        fecha = date.today()
        fecha1 = str(utiles.sumarDiasAFecha(fecha,meses))+" 23:59:59"
        fecha2 = str(utiles.sumarDiasAFecha(fecha,meses+1))+" 00:00:00"
        listaVentas = self.consultaVendidos(fecha1)
        self.fecha = utiles.invertirFecha2(fecha1[:10])
        listaClientes = []
        cantidad = 0
        self.button2.Enable(True)
        for item in listaVentas:
            idcliente = item["idcliente"]
            r1 = "SELECT idcliente FROM ventas "
            r2 = "WHERE idcliente='"+idcliente+"' AND fecha > '"+fecha2+"'"
            sql = r1+r2
            resultados = consultasBD.ordenCruda(sql)
            if resultados == ():
                listaClientes.append(item)
                cantidad+=1
                if cantidad == totCantidad: break
        for fil,item in enumerate(listaClientes):
            nombre = item["nombre"]
            idcliente = item["idcliente"]
            total = str(str(item["total"]))
            telefono = item["telefono"]
            fechaUltimo = self.ultimoComunicado(item["idcliente"])
            #idcliente,nombre,telefono,ultima,importe
            #0         1      2        3      4
            self.grid1.SetCellValue(fil,0,idcliente)
            self.grid1.SetCellValue(fil,1,nombre)
            self.grid1.SetCellValue(fil,2,telefono)
            self.grid1.SetCellValue(fil,3,fechaUltimo)
            self.grid1.SetCellValue(fil,4,total)
            self.grid1.SetCellAlignment(fil, 3, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fil, 4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.AppendRows()
        self.ajustarColumnas()

    def OnImprimir(self, event):
        print "Imprimir"
        #idcliente,nombre,telefono,ultima,importe
        #0         1      2        3      4

        f=open("c:\\erpsussan.doc\\reporte-clientesQueNoCompran2.html","w")
        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        
        totalItemPorPagina = 55
        totalPaginas = int(self.grid1.GetNumberRows()-1) / totalItemPorPagina 
        totalPaginas+= 1

        def encabezadoPagina(texto):
            fecha = utiles.getfechaTime()

            a = '<table width="100%" cellspacing="0" border="0">\n'
            a+= '<tr>\n'
            a+= '<td valign="center" align="left" width="33%">'
            a+= 'SUSSAN BOUTIQUE<br>Clientes que no compran - Limite: '+self.fecha
            a+= '<br></td>\n<td valign="center" align="left" width="34%">'
            a+= '<br>'
            a+= '</td>\n'
            a+= '<td valign="center" align="right" width="33%">'+fecha
            a+= '<br>P&aacute;gina '+str(numeroPagina)+' / '+str(totalPaginas)+'</td>\n'
            a+= '</tr>\n'
            a+= '</table>\n'
            texto+= a
            return texto
        
        def encabezadoTabla(texto):
            #idcliente,nombre,telefono,ultima,importe
            #0         1      2        3      4
            a = '<hr>'

            tama = '"0.05"'
            a+= '<table width="100%" cellspacing="1" border="0"> \n'
            a+= '<tr>\n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Orden</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Nro. Cliente</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Nombre</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Tel&eacute;fono</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Ultima<br>comunicaci&oacute;n</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Importe</font></td> \n'
            a+= '</tr> \n'
#            a+= '</table>\n'
            a+= '<tr>\n'
            a+= '<td colspan="5"><hr></td>\n'
            a+= '</tr>\n'
            texto+= a
            return texto
        
        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'

        cadena = encabezadoPagina(cadena)
        cadena = encabezadoTabla(cadena)
        f.write(cadena)

        renglon = 0
        for i in xrange(self.grid1.GetNumberRows()-1):
            #idcliente,nombre,telefono,ultima,importe
            #0         1      2        3      4
            orden = str(i+1)
            idcliente = self.grid1.GetCellValue(i,0)
            nombre = self.grid1.GetCellValue(i,1)
            telefono = self.grid1.GetCellValue(i,2)
            ultima = self.grid1.GetCellValue(i,3)
            total = self.grid1.GetCellValue(i,4)
            
            tama = '"0.2"'
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+orden+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+idcliente+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+nombre+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+telefono+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+ultima+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+total+'</font></td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)
            
            renglon+= 1
            
            if renglon == totalItemPorPagina :
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezadoTabla(cadena)
                f.write(cadena)

        tama = '"0.2"'
            
        cadena = '</table>\n'
        f.write(cadena)
        f.close()

        import os
        os.system("taskkill /IM firefox.exe /F")
        os.system("c:\\explorer.lnk c:\\erpsussan.doc\\reporte-clientesQueNoCompran2.html")

    def OnDobleClick(self, event):
        fil = self.grid1.GetGridCursorRow()
        col = self.grid1.GetGridCursorCol()
        #idcliente,nombre,telefono,ultima,importe
        #0         1      2        3      4
        datosCliente = {}
        datosCliente["idcliente"]=self.grid1.GetCellValue(fil,0)
        datosCliente["nombre"]=self.grid1.GetCellValue(fil,1)
        datosCliente["cumple"]=""
        datosCliente["telefono"]=self.grid1.GetCellValue(fil,2)
        datosCliente["email"]=""
        datosCliente["localidad"]=""

        activado = True
        lista = []
        import HistorialClienteComunica
        appBack = HistorialClienteComunica.create(None,datosCliente,activado,lista)
        appBack.Show()

